/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package domain.controllers;

import domain.Entity.EntityDireccion;
import domain.Entity.EntityGestor;
import domain.Entity.EntityPerfil;
import domain.Entity.EntityTrabajador;
import domain.Entity.EntityUsuario;
import domain.commands.RegistrarComando;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import managers.UsuarioManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;

/**
 *
 * @author jorge
 */
public class crearTrabajadorController extends SimpleFormController {


    
    public crearTrabajadorController() {
        setCommandClass(RegistrarComando.class);
  }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, org.springframework.validation.BindException errors) throws Exception {
        UsuarioManager um = UsuarioManager.getInstance();
        ModelAndView mav = new ModelAndView();
        HttpSession session = request.getSession();
        EntityUsuario eu = (EntityUsuario) session.getAttribute("usuario");
        if(eu == null){
            mav.setView(new RedirectView("login.htm"));
            return mav;
        }else{
        
        //EntityUsuario usuario = (EntityUsuario) session.getAttribute("usuario");
        EntityGestor gestor = (EntityGestor) session.getAttribute("gestorUsuario");
        RegistrarComando rc = (RegistrarComando) command;
        long dni = Integer.parseInt(rc.getDni());
        
        if(estaUsuario(rc.getNombre())){
            mav.setView(new RedirectView("error.htm"));
        
        }else{
            
            um.addTrabajador(gestor,dni,rc.getEmail(),rc.getContrasena(),rc.getNombre());
            //enviarmensaje(nombre,contrasena,email);
            mav.setView(new RedirectView("mostrarTrabajadores.htm"));
            
        }
        return mav;
        }
    }

    private void enviarmensaje(String nombre, String contrasena, String email) throws MessagingException {
        Properties props = new Properties();

        // Nombre del host de correo, es smtp.gmail.com
        props.setProperty("mail.smtp.host", "smtp.gmail.com");

        // TLS si está disponible
        props.setProperty("mail.smtp.starttls.enable", "true");

        // Puerto de gmail para envio de correos
        props.setProperty("mail.smtp.port","587");

        // Nombre del usuario
        props.setProperty("mail.smtp.user", "ejemplo@gmail.com");

        // Si requiere o no usuario y password para conectarse.
        props.setProperty("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props);
        
        // Para obtener un log de salida más extenso
        session.setDebug(true);
        
        MimeMessage message = new MimeMessage(session);

        // Quien envia el correo
        message.setFrom(new InternetAddress("jorgeabaron87@gmail.com"));

        // A quien va dirigido
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));

        message.setSubject("Nuevo Trabajador");
        message.setText("Ha sido usted  elegido para trabajar en un nuevo proyecto, su nombre de usuario es: "+ nombre + " y su contraseña es: "+ contrasena);
        
        Transport t = session.getTransport("smtp");

        // Aqui usuario y password de gmail
        t.connect("jorgeabaron87@gmail.com","kingbaron");
        t.sendMessage(message,message.getAllRecipients());
        t.close();


    }
    
    private boolean estaUsuario(String nombre){
        
         UsuarioManager um = UsuarioManager.getInstance();
         EntityUsuario eu = um.get(nombre);
         
         return (eu.getNombre() != null) ;
        
    }

}
